package Model;

import Model.Settings.ModelSettings;
import Model.Exceptions.FileIdException;
import java.io.Serializable;

import java.util.Random;

/**
 * 
 * La classe FileId represente l'identifiant du fichier en cours de transfert 
 * 
 * @author      Frank Djomo
 * @author      Christelle SIAGO HAPPI
 * @author      djomopoueme@gmail.com
 * @author      christelle.siagohappi@gmail.com
 * @version     1.0
 */
public class FileId implements Serializable {
    /**
    * 
    */
    private static final long serialVersionUID = -1762433869048488677L;
    /**
    * Le identifiant du fichier
    */
    private int m_FileId = 0;
    /**
    * La classe qui génèrera les nombres aléatoires
    */
    private final static  Random m_Random = new Random();


    /**
    * Génére aléatoirement un fileid
    */
    public FileId() throws FileIdException { 
      this.setFileId(FileId.generateFileId());  
    }
    /**
    * Créer un FileId avec un entier mis en paramètre
    * @param fileid L'identifiant à utiliser
    * @throws FileIdException Si l'identifiant n'est pas conforme
    */
    public FileId(int fileid) throws FileIdException {
        this();
        this.setFileId(fileid);
    }
    /**
    *  Modifie le fileid
    * @param fileid
    * @throws UniformedFileId
    */
    private void setFileId(int fileid) throws FileIdException {
        if( ModelSettings.checkFileId(fileid) == false ) throw new FileIdException("FileID non valide");
        this.m_FileId = fileid;
    }
    /**
    * Transforme l'objet en int
    * @return Le file id correspondant
    */
    public int toInt() {
          return this.m_FileId;
    }
    /**
    * Transforme l'objet en une chaine de caractère
    */
    @Override
    public String toString() {
          return String.valueOf( this.toInt() );
    }  
    /**
    * Teste si deux objects FileId dont identiques.
    * @return    <code>true</code> si egaux 
    *            <code>false</code> sinon 
    */
    @Override
    public boolean equals(Object o) {
          return (this.getClass().isInstance(o) && this.hashCode()== ((FileId)o).hashCode());
    }
    /**
    * Genere un hashcode pour les objets FileId.
    * @return valeur du hashcode
    */
    @Override
    public int hashCode() {
        int hash = 3;
        hash = 37 * hash + this.m_FileId;
        return hash;
    }
    /**
    * Génère un fileid aléatoire
    * @return int value
    */
    public static int generateFileId() {
        return m_Random.nextInt(ModelSettings.MAX_FILEID);
    }
}

